﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BLO;

namespace QuanLyBanHang
{
    public partial class frmHoaDonBan : Form
    {
        private readonly HoaDonBan_Blo _hoaDonBanBlo = new HoaDonBan_Blo();
        public frmHoaDonBan()
        {
            InitializeComponent();
        }

        private void frmHoaDonBan_Load(object sender, EventArgs e)
        {
            LoadData();
            Utility.ComboboxUlt.LoadData(new NhanVien_Blo().GetAllObject(), cbbNhanVien,
                new[] { "TenNV", "MaNV" }, "Chọn nhân viên");
            Utility.ComboboxUlt.LoadData(new SanPham_Blo().GetAllObject(), cbbSanPham,
                new[] { "TenSP", "MaSP" }, "Chọn sản phẩm");
            Utility.ComboboxUlt.LoadData(new KhachHang_Blo().GetAllObject(), cbbMaKH,
                new[] { "MaKH", "MaKH" }, "Chọn khách hàng");
        }

        private void LoadData()
        {
            dgvHoaDonBan.DataSource = _hoaDonBanBlo.GetAllObject().Tables[0];
            dgvHoaDonBan.Columns["MaHDB"].HeaderText = "Mã hóa đơn bán";
            dgvHoaDonBan.Columns["MaSP"].HeaderText = "Mã sản phẩm";
            dgvHoaDonBan.Columns["SoLuong"].HeaderText = "Số lượng";
            dgvHoaDonBan.Columns["ThanhTien"].HeaderText = "Thành tiền";
            dgvHoaDonBan.Columns["KhuyenMai"].HeaderText = "Khuyến mại";
            dgvHoaDonBan.Columns["NgayBan"].HeaderText = "Ngày bán";
            dgvHoaDonBan.Columns["MaNV"].HeaderText = "Mã nhân viên";
            dgvHoaDonBan.Columns["MaKH"].HeaderText = "Mã khách hàng";
            dgvHoaDonBan.Columns["GiaBan"].HeaderText = "Đơn giá";
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(cbbMaKH.SelectedValue.ToString()) || string.IsNullOrEmpty(cbbNhanVien.SelectedValue.ToString()) || string.IsNullOrEmpty(cbbSanPham.SelectedValue.ToString()))
            {
                MessageBox.Show("Vui lòng chọn các loại mã!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            string mhdb = txtMaHDB.Text.Trim();
            string ngayban = dateTimePicker1.Value.Date.ToString().Split(' ')[0];
            string manv = cbbNhanVien.SelectedValue.ToString();
            string makh = cbbMaKH.SelectedValue.ToString();
            string masp = cbbSanPham.SelectedValue.ToString();
            int soluong = int.Parse(txtSoLuong.Text.Trim());
            int khuyenmai = int.Parse(txtKhuyenMai.Text.Trim());
            decimal giaban = decimal.Parse(txtDonGia.Text.Trim());

            int result;
            string msg;
            if (string.IsNullOrEmpty(mhdb))
            {
                result = _hoaDonBanBlo.AddObject("HDN" +_hoaDonBanBlo.AutoIncrementIdObject(), ngayban, manv, makh, masp, soluong, khuyenmai, giaban);
                msg = result > 0 ? "Thêm hóa đơn thành công!" : "Thêm hóa đơn không thành công!";
            }
            else
            {
                result = _hoaDonBanBlo.EditObject(mhdb, ngayban, manv, makh, masp, soluong, giaban, khuyenmai);
                msg = result > 0 ? "Cập nhập hóa đơn thành công!" : "Cập nhập hóa đơn không thành công!";
            }

            if (result > 0)
            {
                LoadData();
                SetEnableInput(false);
                btnLuu.Enabled = false;
                btnBoQua.Enabled = false;
                btnThem.Enabled = true;
                txtSoLuong.Enabled = false;
            }

            MessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, result > 0 ? MessageBoxIcon.Information : MessageBoxIcon.Error);
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("Bạn muốn xóa hóa đơn này?", "Thông  báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            if (dr == DialogResult.No) return;

            int result = _hoaDonBanBlo.DeleteObject(txtMaHDB.Text);

            MessageBox.Show(result > 0 ? "Xóa hóa đơn thành công" : "Xóa hóa đơn không thành công!", "Thông báo", 
                MessageBoxButtons.OK, result > 0 ? MessageBoxIcon.Information : MessageBoxIcon.Error);

            if (result > 0)
                LoadData();
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            SetEnableInput(true);
            ResetValue();
            txtSoLuong.Enabled = true;
            btnXoa.Enabled = false;
            btnSua.Enabled = false;
            btnIn.Enabled = false;
            btnThem.Enabled = false;
            btnLuu.Enabled = true;
            btnBoQua.Enabled = true;
        }
        private void ResetValue()
        {
            txtDonGia.Text = "";
            txtKhuyenMai.Text = "";
            txtMaHDB.Text = "";
            txtSoLuong.Text = "";
            txtThanhTien.Text = "";
            cbbMaKH.SelectedIndex = 0;
            cbbNhanVien.SelectedIndex = 0;
            cbbSanPham.SelectedIndex = 0;
            dateTimePicker1.Value = DateTime.Now.Date;
        }

        private void SetEnableInput(bool b)
        {
            txtKhuyenMai.Enabled = b;
            cbbMaKH.Enabled = b;
            cbbNhanVien.Enabled = b;
            cbbSanPham.Enabled = b;
            dateTimePicker1.Enabled = b;
        }

        private void dgvHoaDonBan_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvHoaDonBan.Rows[e.RowIndex].Cells[0].Value == null || dateTimePicker1.Enabled) return;
            txtMaHDB.Text = dgvHoaDonBan.Rows[e.RowIndex].Cells["MaHDB"].Value.ToString();
            dateTimePicker1.Value = DateTime.Parse(dgvHoaDonBan.Rows[e.RowIndex].Cells["NgayBan"].Value.ToString());
            cbbNhanVien.SelectedValue = dgvHoaDonBan.Rows[e.RowIndex].Cells["MaNV"].Value.ToString();
            cbbMaKH.SelectedValue = dgvHoaDonBan.Rows[e.RowIndex].Cells["MaKH"].Value.ToString();
            txtThanhTien.Text = dgvHoaDonBan.Rows[e.RowIndex].Cells["ThanhTien"].Value.ToString();
            cbbSanPham.SelectedValue = dgvHoaDonBan.Rows[e.RowIndex].Cells["MaSP"].Value.ToString();
            txtDonGia.Text = dgvHoaDonBan.Rows[e.RowIndex].Cells["GiaBan"].Value.ToString();
            txtSoLuong.Text = dgvHoaDonBan.Rows[e.RowIndex].Cells["SoLuong"].Value.ToString();
            txtKhuyenMai.Text = dgvHoaDonBan.Rows[e.RowIndex].Cells["KhuyenMai"].Value.ToString();

            btnSua.Enabled = true;
            btnXoa.Enabled = true;
        }

        private void cbbSanPham_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(cbbSanPham.SelectedValue.ToString()) 
                || cbbSanPham.SelectedValue.ToString().Equals("System.Data.DataRowView")) 
                return;

            SanPham_Blo sanPhamBlo = new SanPham_Blo();
            string masp = cbbSanPham.SelectedValue.ToString();
            txtDonGia.Text = sanPhamBlo.GetSanPham(masp).GiaBan.ToString();
        }

        private void btnIn_Click(object sender, EventArgs e)
        {

        }

        private void txtSoLuong_TextChanged(object sender, EventArgs e)
        {
         
        }

        private void txtKhuyenMai_TextChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtSoLuong.Text) || string.IsNullOrEmpty(txtDonGia.Text))
                return;

            int soluong = int.Parse(txtSoLuong.Text.Trim());
            decimal giaban = decimal.Parse(txtDonGia.Text.Trim());
            decimal thanhtien = 0;

            if (string.IsNullOrEmpty(txtKhuyenMai.Text.Trim()) || txtKhuyenMai.Text.Equals("0"))
            {
                thanhtien = soluong * giaban;
            }
            else
            {
                int khuyenmai = int.Parse(txtKhuyenMai.Text.Trim());
                thanhtien = soluong * giaban * khuyenmai / 100;
            }

            txtThanhTien.Text = thanhtien.ToString();
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            btnLuu.Enabled = false;
            btnBoQua.Enabled = false;
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            txtSoLuong.Enabled = false;
            SetEnableInput(false);
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            SetEnableInput(true);
            btnSua.Enabled = false;
            btnLuu.Enabled = true;
            btnBoQua.Enabled = true;
            btnThem.Enabled = false;
            btnXoa.Enabled = false;
        }

    }
}


